package com.imooc.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * @author wangke
 * @version 1.0.0
 * @Description 切面类，记录日志
 * @createTime 2021年07月11日 13:44:00
 */
@Component
@Aspect
public class ServiceLogAspect {
    //创建日志对象
    public static final Logger logger = LoggerFactory.getLogger(ServiceLogAspect.class);

   @Around("execution(* com.imooc.service.impl..*.*(..))") //切面表达式,指定切面类
    public Object recordTimeLog(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        //记录切面方法执行前日志,{}占位符，可补充参数
    logger.info("====== 开始执行切面方法 {}.{}======",
            proceedingJoinPoint.getTarget().getClass(),
            proceedingJoinPoint.getSignature().getName());
    long beforeTime = System.currentTimeMillis();

    //执行切面中方法
        Object proceed = proceedingJoinPoint.proceed();

        Long afterTime = System.currentTimeMillis()-beforeTime;

        //根据处理时间返回日志类型
       if(afterTime>3000){
           logger.error("====== 方法执行完毕，耗时{}毫秒======",afterTime);
       }else if(afterTime>2000){
           logger.warn("====== 方法执行完毕，耗时{}毫秒======",afterTime);
       }else{
           logger.info("====== 方法执行完毕，耗时{}毫秒======",afterTime);
       }
        //返回执行结果
        return proceed;



    }
}
